Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.01.2016, 21:19
Аспирант
Отправить личное сообщение для Synov_son Посмотреть профиль Найти все сообщения от Synov_son
 
Регистрация: 02.08.2013
Сообщений: 74

Цикл ajax запросов
Здравствуйте,

Помогите, пожалуйста, в поиске ошибки.

Есть задача: отправить определенное кол-во запросов на сервер один за другим, не асинхронно, и отображать при этом текущий прогресс.

<div data-url="someurl" data-times-repeat="5" class="pbar">
    <p>Processing...</p>
    <div class="processBar">
        <p class="pbState">0%</p>
        <div class="pbStateBox"></div>
    </div>
</div>

$(document).ready(function(){
	$('.pbar').each(function(i, el){
        setTimeout(function(){ pbar(el) }, 1500*(i+1));
    });
});
function pbar(sel){
	if(sel){
		var $el = $(sel);
		var url = $el.data('url');
		var timesRepeat = 3;//$el.data('times-repeat');
		var timeout = 10*1000;
		if(url && timesRepeat){
			var incPerQuery = Math.floor(100/timesRepeat);
			
			var $bar = $el.find('.pbStateBox');
			var $state = $el.find('.pbState');
			
			for(var i=1; i<=timesRepeat; i++){
				var params = {
				   url: 	url+'&ajax',
				   timeout: timeout,
				   async:	false,
				   success: function(data){
					   var process = (i==timesRepeat ? 100 : i*incPerQuery)+'%';
					   
					   $bar.width(process);
					   $state.html(process);
				   }
				};
				setTimeout(function(){$.ajax(params)}, 300);
			}
		}
	}
}


Но вместо того чтобы отобразить пошагово увеличение процента в блоке с прогрессом ничего не происходит вплоть до последнего запроса (ждет, а потом сразу 100%). Т.е. 0% и потом 100%, но если наблюдать за процессом через dev tools изменения в html происходят, пример:
<p class="pbState">33%</p>
<div class="pbStateBox"></div>

Но только в .pbState, а ширина .pbStateBox даже не сетится. А должно быть:
<p class="pbState">33%</p>
<div class="pbStateBox" style="width: 33%;"></div>

Буду благодарен за любой совет.
Ответить с цитированием
  #2 (permalink)  
Старый 15.01.2016, 13:59
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Synov_son,
попробуйте вместо
$bar.width(process);

такой вариант:
$bar.css('width', process);
Ответить с цитированием
  #3 (permalink)  
Старый 15.01.2016, 15:35
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Вот небольшая симуляция вашего прогресс-бара
<!DOCTYPE html>
<html>
<head>
    <title>Untitled Page</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
</script>
    <script type="text/javascript">
        var progress = 0;
        function wide() {
            progress = progress + 5;

            $('.pbState').html(progress + '%');
            $('.pbStateBox').css('width', progress + '%');
        }
    </script> 
</head>
<body>
 <p class="pbState">0%</p>
 <div class="pbStateBox" style="width: 0%; border:3px solid red;"></div>
 <input type=button value="Расширяем" onclick="wide()" />
</body>
</html>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько запросов к php через AJAX Florens AJAX и COMET 7 25.07.2014 21:21
Стек ajax запросов Vincent AJAX и COMET 6 04.03.2013 15:08
Несколько ajax запросов одновременно pitbull0007 AJAX и COMET 3 16.10.2012 19:08
Одновременное количество AJAX запросов decadent AJAX и COMET 18 03.06.2011 18:16
Отследить окончание нескольких ajax запросов mikel AJAX и COMET 2 11.03.2011 17:14